home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 010 / pcgames.arc / TICTAC.BAS (.txt) < prev    next >
Encoding:
GW-BASIC  |  1983-03-29  |  7.0 KB  |  203 lines

  1. 20  CLS:PRINT
  2. 30  PRINT " *** RATIONAL TIC-TAC-TOE ***"
  3. 40  REM   BY D. D. HINRICHS   -   1977 APRIL
  4. 50  REM   MODIFIED FOR VDM-1 AND TYPED IN BY
  5. 60  REM      FREDRICK AND LYNNE GHOFULPO
  6. 70  REM              1979 JULY 4TH
  7. 80  PRINT:PRINT "DO YOU WANT BOARD LAYOUT (Y OR N) ?";
  8. 85  A$=INKEY$:IF A$="" GOTO 85
  9. 90  A$=LEFT$(A$,1):IF A$="N"OR A$="n" THEN 330 'SKIP INSTRUCTIONS
  10. 100  IF A$<>"Y" AND A$<>"y" THEN PRINT:PRINT " W H A T  ? ?":GOTO 80
  11. 110  N=48
  12. 120  FOR I=1 TO 9
  13. 124  J=I:IF I>6 THEN J=I-6 ELSE IF I<4 THEN J=I+6
  14. 130  B(I)=N+J:REM SET BOARD TO IT'S NO.
  15. 140  NEXT I
  16. 150  GOSUB 1620:REM DISPLAY PLAYING BOARD
  17. 160  PRINT:PRINT
  18. 170  PRINT "COMPUTER MOVES ARE:  X"
  19. 180  PRINT "YOUR MOVES ARE:      O":PRINT:PRINT "PRESS ANY KEY TO BEGIN."
  20. 190  A$=INKEY$:IF A$="" GOTO 190
  21. 200  CLS
  22. 210  DATA  4,6,8,2,3,7,0,9,0,0,  7,3,1,4,9,3,7,6,9,4
  23. 220  DATA  2,8,6,4,1,9,0,7,0,0,  1,9,3,7,2,7,3,8,9,2
  24. 230  DATA  9,1,8,2,7,3,7,1,2,9,  8,2,1,9,6,4,0,3,0,0
  25. 240  DATA  9,1,6,3,4,1,9,7,4,3,  6,4,2,8,7,3,0,1,0,0
  26. 250  DATA  5,8,7,3,6,4,0,9,0,0,  5,8,6,4,1,9,0,7,0,0
  27. 260  DATA  1,3,5,9,8,5,8,3,1,7,  1,3,7,4,6,0,9,0,8,0
  28. 270  DATA  3,1,5,7,8,5,8,3,1,7,  1,3,5,8,9,0,0,0,0,0
  29. 280  DATA  1,5,7,4,6,3,6,5,7,4,  3,1,5,8,7,0,0,0,0,0
  30. 290  DATA  4,7,5,6,9,5,9,7,4,3,  9,5,7,8,4,7,4,9,5,8
  31. 300  DATA  5,9,2,8,3,3,2,9,5,6,  5,9,3,2,7,2,3,5,8,9
  32. 310  DATA  2,3,5,8,9,9,5,3,2,6,  3,2,5,9,7,7,4,5,3,9
  33. 320  DATA  7,4,3,5,2,3,2,7,4,5
  34. 330  REM ENTRY POINT TO INTIALIZE FOR NEW GAME
  35. 340  RESTORE                     :REM RESET GAME PNTR. TO START
  36. 350  E=0
  37. 360  F=INT(RND(1)*2)             :REM SET FLAG TO 0 OR 1
  38. 370  G=1
  39. 380  H=0
  40. 390  C1=10
  41. 400  C2=10
  42. 410  N=0
  43. 420  FOR I=1 TO 9                :REM SET BOARD CELLS TO BLANKS
  44. 430  B(I)=32
  45. 440  NEXT I
  46. 450  REM INITIAL COMP. MOVE IS 0, 1, OR 2 (0 THEN CHANGED TO 5)
  47. 460  C=INT(RND(1)*3)             :REM SELECT INITIAL MOVE
  48. 470  IF C=0 THEN C=5             :REM CENTER OPENING MOVE
  49. 480  U=10-C                      :REM PUT COMP. MOVE IN CELL,
  50. 490  GOSUB 1890                  :REM DISP BRD, 1ST USER MOVE
  51. 500  IF C=5 THEN 1560            :REM CENTER OPENING GAME
  52. 510  IF C=2 THEN 1170            :REM SIDE OPENING GAME
  53. 520  IF U=5 THEN 790             :REM CORNER GAME,1ST USER MOV 5
  54. 530  R=10*U+140                  :REM FIND RESPNS. FOR CRNR GAME
  55. 540  IF U>5 THEN R=R-10
  56. 550  E=1                         :REM REENTRY PNT FOR 5 UNIT RES
  57. 560  IF F=1 THEN R=R+5
  58. 570  F=1                         :REM REENTRY PNT FOR 7 UNIT RES
  59. 580  IF R=0 THEN 620
  60. 590  FOR I=1 TO R
  61. 600  READ C                      :REM INCREMENT DATA PNTR TO 1ST
  62. 610  NEXT I
  63. 620  REM REENTRY POINT TO SELECT COMPUTER RESPONSES
  64. 630  F=F-1
  65. 640  F=F*F                       :REM FLIP FLAG 
  66. 650  READ C                      :REM SELECT COM. RESP. FROM LIB
  67. 660  C2=C1
  68. 670  C1=C                        :REM UPDATE COMPUTER RESPONSE
  69. 680  N=N+1                       :REM INCREMENT RESPONSE NO.
  70. 690  IF C=0 OR C=U THEN 620      :REM IF SPACER OR MATCH,TRY AGN
  71. 700  B(C)=88                     :REM PUT COM. MOVE IN CELL
  72. 710  IF C2=0 OR C=H THEN 990     :REM DRAW GAME
  73. 720  IF F=1 THEN 1850            :REM COMPUTER WINS
  74. 730  IF E=0 THEN 750
  75. 740  IF N=5 THEN 1850            :REM COMPUTER WINS
  76. 750  GOSUB 1620                  :REM DISPLAY UPDATED BOARD
  77. 760  GOSUB 1740                  :REM ACCEPT NEXT USER MOVE
  78. 770  GOTO 620                    :REM LOOP TO NEXT SEL. RESPON.
  79. 780  :
  80. 790  REM CORNER OPENING GAME, 1ST USER MOVE WAS 5.
  81. 800  U=1                         :REM PUT COM. MOVE (9) IN CELL,
  82. 810  GOSUB 1890                  :REM DISP.BRD, 2ND USER MOVE
  83. 820  IF U=3 OR U=7 THEN 1100     :REM 2ND USER MOV IS 3 OR 7
  84. 830  IF U=4 OR U=8 THEN G=0      :REM 2ND USER MOV IS 4 OR 8
  85. 840  GOSUB 1890                  :REM CALC RES, DISP 3RD MOV
  86. 850  C=7
  87. 860  IF G=0 THEN C=3             :REM SET TRIAL COM. MOVES
  88. 870  IF C<>U THEN 1840           :REM TRIAL CORRECT, COM WINS
  89. 880  GOSUB 1890                  :REM ELSE, DISP 4TH MOVE
  90. 890  IF G=0 THEN 940
  91. 900  C=2
  92. 910  IF B(2)<>32 THEN C=6        :REM SET TRIAL MOVES
  93. 920  IF B(C)=32 THEN 1840        :REM TRIAL CORRECT, COM WINS
  94. 930  GOTO 970
  95. 940  C=4
  96. 950  IF B(4)<> 32 THEN C=8       :REM SET COM TRIAL MOVES
  97. 960  IF B(C)=32 THEN 1840        :REM TRIAL CORRECT, COM WINS
  98. 970  C=10-U                      :REM CAL FINAL MOVE FOR DRAW
  99. 980  B(C)=88                     :REM PUT COM MOVE IN CELL
  100. 990  GOSUB 1620                  :REM DISP DRAW GAME BOARD
  101. 1000  PRINT
  102. 1010  PRINT"CONGRATULATIONS-YOU GOT A DRAW GAME"
  103. 1020  PRINT: PRINT "DO YOU WANT TO PLAY ANOTHER GAME (Y OR N)?";
  104. 1030  A$=INKEY$:IF A$="" THEN 1030
  105. 1040  IF A$="Y" OR A$="y" THEN CLS: GOTO 330
  106. 1050  IF A$<>"N" AND A$<>"n" THEN PRINT:  PRINT " W H A T  ? ? ": GOTO 1020
  107. 1060  PRINT
  108. 1070  PRINT " SO LONG UNTIL NEXT TIME"
  109. 1080  GOTO 1970
  110. 1090  REM CORNER OPENING GAME, 1ST USER MOVE 5, 2ND MOVE 3 OR 7
  111. 1100  C0=2
  112. 1110  IF U=3 THEN C0=4           :REM SET TRIAL COM MOVE
  113. 1120  GOSUB 1890                 :REM CALC ACCEPT 3RD MOVE
  114. 1130  C=C0
  115. 1140  IF U=C THEN C=C+4          :REM ADJUST TRIAL COM MOVES
  116. 1150  GOTO 1840                  :REM COM WINS WITH ADJUST.MOV
  117. 1160  :
  118. 1170  REM SIDE OPENING GAME REENTRY POINT
  119. 1180  IF U=8 THEN 1260           :REM SKIP IF 1ST MOVE IS 8
  120. 1190  R=10*U+60                  :REM FIND RESP. FOR SIDE GAME
  121. 1200  IF U=1 THEN R=80
  122. 1210  IF INT(U/2)=U/2 THEN 550   :REM RET. TO SEL RESPONSES
  123. 1220  IF U>6 THEN E=1
  124. 1230  GOTO 570                   :REM RET TO SEL RESPONSES
  125. 1240  :
  126. 1250  REM SIDE OPENING GAME, 1ST USER MOVE IS 8
  127. 1260  B(9)=88                    :REM COM RESP. IS 9
  128. 1270  GOSUB 1620                 :REM DISPLAY UP DATE BRD
  129. 1280  GOSUB 1740                 :REM ACCEPT 2ND USER MOVE
  130. 1290  IF U<4 THEN 1390
  131. 1300  IF U>5 THEN 1470
  132. 1310  B(3)=88                    :REM COM RESPONSE IS 3
  133. 1320  GOSUB 1620                 :REM DISPLAY UPDATED BRD
  134. 1330  GOSUB 1740                 :REM ACCEPT 3RD USER MOVE
  135. 1340  C=1
  136. 1350  IF U=1 THEN C=6            :REM COM RESP IS 1 OR 6
  137. 1360  GOTO 1840                  :REM COMPUTER WINS
  138. 1370  :
  139. 1380  REM SIDE OPENING GAME, 1ST MOVE 8, 2ND USER 1 OR 3.
  140. 1390  F=0
  141. 1400  H=6
  142. 1410  IF U<>1 THEN 1440          :REM SETUP 5 LAST RESPONSES
  143. 1420  F=1
  144. 1430  H=4
  145. 1440  R=140                      :REM SET RESPONSE ENTRY PNT.
  146. 1450  GOTO 550                   :REM RET TO SELECT RESPONSES
  147. 1460  :
  148. 1470  REM SIDE OPENING GAME, 1ST USER MOVE 8, 2ND 6 OR 7.
  149. 1480  B(1)=88                    :REM COM RESPONSE IS 1.
  150. 1490  GOSUB 1620                 :REM DISPLAY UPDATE BRD
  151. 1500  GOSUB 1740                 :REM ACCEPT 3RD USER MOVE
  152. 1510  C=3
  153. 1520  IF U=3 THEN C=5            :REM COM RESP IS 3 OR 5
  154. 1530  GOTO 1840                  :REM COMPUTER WINS
  155. 1540  :
  156. 1550  REM CENTER OPENING GAME REENTRY POINT
  157. 1560  R=U*10-10                  :REM FIND RESP FOR CENTER GAME
  158. 1570  IF U>5 THEN R=R-10
  159. 1580  IF INT(U/2)=U/2 THEN 550   :REM RET TO SELECT RESPONSES
  160. 1590  GOTO 570                   :REM RET TO SELECT RESPONSES
  161. 1600  :
  162. 1610  REM DISPLAY SUBROUTINE TO PRINT UPDATED BOARD
  163. 1620  CLS
  164. 1630  PRINT: PRINT
  165. 1640  PRINT TAB(29) "l   l"
  166. 1650  PRINT TAB(27) CHR$(B(1));" l ";CHR$(B(2));" l ";CHR$(B(3))
  167. 1660  PRINT TAB(25) "----+---+----"
  168. 1670  PRINT TAB(27) CHR$(B(4));" l ";CHR$(B(5));" l ";CHR$(B(6))
  169. 1680  PRINT TAB(25) "----+---+----"
  170. 1690  PRINT TAB(27) CHR$(B(7));" l ";CHR$(B(8));" l ";CHR$(B(9))
  171. 1700  PRINT TAB(29) "l   l"
  172. 1710  RETURN
  173. 1720  :
  174. 1730  REM SUBROUTINE TO CHECK AND ACCEPT NEW USER MOVE.
  175. 1740  PRINT: PRINT "YOUR MOVE IS"
  176. 1742  U$=INKEY$:IF U$="" GOTO 1742 ELSE IF LEN(U$)=2 GOTO 1815
  177. 1750  U=VAL(U$):IF U<1 OR U>9 THEN 1800
  178. 1760  IF INT(U)<>U THEN 1800
  179. 1762  IF U>6 THEN U=U-6 ELSE IF U<4 THEN U=U+6
  180. 1770  IF B(U)<>32 THEN 1800
  181. 1780  B(U)=79
  182. 1790  RETURN
  183. 1800  PRINT "YOUR MOVE IS ILLEGAL. TRY AGAIN."
  184. 1810  GOTO 1740
  185. 1815  PRINT "PRESS 'Num Lock' key if you are using mumeric keypad.":GOTO 1800
  186. 1820  :
  187. 1830  REM ROUTINE FOR WHEN THE COMPUTER WINS GAME.
  188. 1840  B(C)=88                    :REM PUT COM MOVE IN CELL
  189. 1850  GOSUB 1620                 :REM DISPLAY WINNING GAME
  190. 1860  PRINT
  191. 1870  PRINT "***** I WON *****"
  192. 1880  GOTO 1020                  :REM NEW GAME ?
  193. 1890  :
  194. 1900  REM SUBROUTINE FOR COMBINED CALC ENTERING, DISPLAY, MOVE
  195. 1910  C=10-U
  196. 1920  B(C)=88
  197. 1930  GOSUB 1620
  198. 1940  GOSUB 1740
  199. 1950  RETURN
  200. 1960  :
  201. 1970  FOR I=1 TO 5000:NEXT I:CLS
  202. 1980  END
  203.